package classes;

import java.util.ArrayList;

import competences.ECompetence;

import data.ECaracteristique;
import data.JetsDeSauvegarde;
import dons.EDons;
import magie.Magie;

public class Ensorceleur extends Classe {
	
	private Magie magie;
	
	public Ensorceleur (int pourcCombattant) {
		super();
		magie = new Magie(this.getClass(), pourcCombattant);
	}
	
	public Ensorceleur() {
		super();
		magie = new Magie(this.getClass(), 50);
	}
	
	@Override
	protected void ajoutCaracFavorables() {
		caracFavorable.add(ECaracteristique.CHA);
	}

	@Override
	protected void ajoutCompetencesDeClasse() {
		bonusCompetence = 2;
		competenceDeClasse.add(ECompetence.Artisanat);
		competenceDeClasse.add(ECompetence.Bluff);
		competenceDeClasse.add(ECompetence.Concentration);
		competenceDeClasse.add(ECompetence.Connaissance_des_sorts);
		competenceDeClasse.add(ECompetence.ConnaissanceMystere);
		competenceDeClasse.add(ECompetence.Profession);
	}

	private int[] CreateTabSortClasse (){
		int[] nbSort = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
		int i;
		int niveauMax = this.niveau/2;
		
		if (this.niveau == 1){
			nbSort[0]=5;
			nbSort[1]=3;
		}
		else if(this.niveau==2){
			nbSort[0]=6;
			nbSort[1]=4;
		}
		else if (this.niveau==3){
			nbSort[0]=6;
			nbSort[1]=5;
		}
		else if (this.niveau==4){
			nbSort[0]=6;
			nbSort[1]=6;
			nbSort[2]=3;
		}
		else if ((this.niveau<20) && (this.niveau%2==0)){
			for(i=0; i<niveauMax-1;i++)
				nbSort[i]=6;
			nbSort[niveauMax-1] = 5;
			nbSort[niveauMax] = 3;
		}
		else if ((this.niveau<20) && (this.niveau%2==1)){
			for(i=0; i<niveauMax;i++)
				nbSort[i]=6;
			nbSort[niveauMax] = 4;
		}
		else if (this.niveau==20){
			for(i=0; i<10;i++)
				nbSort[i]=6;
		}
		
		return nbSort;
	}
	
	private int[] CreateTabSortConnu (){
		int[] nbSort = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
		int i;
		int niveauMax = this.niveau/2;
		
		if (this.niveau == 1){
			nbSort[0]=4;
			nbSort[1]=2;
		}
		else if(this.niveau==2){
			nbSort[0]=5;
			nbSort[1]=2;
		}
		else if (this.niveau==3){
			nbSort[0]=5;
			nbSort[1]=3;
		}
		else if (this.niveau==4){
			nbSort[0]=6;
			nbSort[1]=3;
			nbSort[2]=1;
		}
		else if (this.niveau==5){
			nbSort[0]=6;
			nbSort[1]=4;
			nbSort[2]=2;
		}
		else if (this.niveau==6){
			nbSort[0]=7;
			nbSort[1]=4;
			nbSort[2]=2;
			nbSort[2]=1;
		}
		else if(this.niveau<21){
			if ((this.niveau<20) && (this.niveau%2==0)){
				for(i=2; i<niveauMax-2;i++)
					nbSort[i]=4;
				nbSort[niveauMax-2] = 3;
				nbSort[niveauMax-1] = 2;
				nbSort[niveauMax] = 1;
			}
			else if ((this.niveau<20) && (this.niveau%2==1)){
				for(i=2; i<niveauMax-1;i++)
					nbSort[i]=4;
				nbSort[niveauMax-1] = 3;
				nbSort[niveauMax] = 2;
			}
			
			if(this.niveau>9)
				nbSort[0]=9;
			else if(this.niveau>7)
				nbSort[0]=8;
			else
				nbSort[0]=7;
			
			nbSort[1]=5;
			
			if(this.niveau>10)
				nbSort[2]=5;

			for(i=6; i<this.niveau-10;i++)
				nbSort[i]=3;
			
		}
		
		
		
		return nbSort;
	}
	
	@Override
	public void AdjustSort (int[] carac){
		int[] nbSortParJour = this.CreateTabSortClasse();	
		int[] nbSortConnu = this.CreateTabSortConnu ();
		int[] nbSortConnuActuel = this.magie.getNbSort();
		int i, caracImp = carac[ECaracteristique.CHA.ordinal()];
		
		for(i=0; i<10; i++){
			//limitation du a la valeur d'intelligence
			if(i>caracImp-10)
				nbSortParJour[i]=-1;
			//ajout du au modif de charisme
			if((((caracImp-10)/2)>=i) && (i!=0) && (nbSortParJour[i]!=-1))
				nbSortParJour[i] ++;
			if(((((caracImp-10)/2)-4)>=i) && (i!=0) && (nbSortParJour[i]!=-1))
				nbSortParJour[i] ++;
			if(((((caracImp-10)/2)-8)>=i) && (i!=0) && (nbSortParJour[i]!=-1))
				nbSortParJour[i] ++;	
			if(((((caracImp-10)/2)-12)>=i) && (i!=0) && (nbSortParJour[i]!=-1))
				nbSortParJour[i] ++;				
			
			if(nbSortConnuActuel[i]<nbSortConnu[i])
				this.magie.AddSort(nbSortConnu[i]-nbSortConnuActuel[i], i);
		}
		this.magie.UpdateNbSortParJour(nbSortParJour);
				
	}
	
	@Override
	public void levelUp() {
		super.niveau++;
		
		super.setBBANonCombattant();
		super.setJdS(JetsDeSauvegarde.Volonte);
	}

	@Override
	public String toString() {
		return "Ensorceleur\n" + super.toString() + "\n" + this.magie;
	}
}
